package com.example.workflow.mapper;



import com.example.workflow.dto.UpdatePassword;
import com.example.workflow.pojo.UserInfo;
import com.example.workflow.vo.UserInfoVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import java.util.List;

@Mapper
public interface UserInfoMapper {

    /**
     * 用户登录（废弃接口）
     *
     * @return
     */
    UserInfo login();

    /**
     * 根据用户id寻找用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    UserInfo findById(@Param("id") Integer id);

    /**
     * 根据用户名寻找用户信息
     * 用于重写UserDetailService中寻找用户逻辑
     *
     * @param userName 用户名
     * @return 用户信息
     */
    UserInfo getUserInfoByUserName(@Param("userName") String userName);

    /**
     * 用户注册
     *
     * @param userInfo 用户注册信息
     */
    int register(UserInfo userInfo);

    /**
     * 更新用户信息
     *
     * @param userInfo 用户信息
     */
    void update(UserInfo userInfo);

    /**
     * 修改用户信息
     *
     */
    void updatePassword(UpdatePassword updatePassword);

    /**
     * 删除用户
     *
     * @param id 用户id
     */
    void delete(Integer id);

    /**
     * 查找用户列表
     *
     * @param
     * @return
     */
    List<UserInfoVo> userList(@Param("id")Integer id,@Param("name") String name, @Param("department") String department, @Param("role") String role);

    /**
     * 用户删除前判断
     *
     * @param id 用户id
     * @return 未处理报告数
     */
    Integer orderList(@Param("id") Integer id);

    /**
     * 用戶刪除前判斷
     *
     * @param id 用戶id
     * @return 用戶所在部門剩餘人數
     */
    Integer deptJudge(@Param("id") Integer id);

    /**
     * 根据工单信息查找用户信息
     *
     * @return
     */
    UserInfo getUserInfoByOrder(@Param("orderId") Long orderId);

    /**
     * 根据用户id列表批量查找用户信息
     *
     * @param userIds id列表
     * @return
     */
    List<UserInfo> getUserInfoByIds(@Param("userIds") List<Integer> userIds);

    /**
     * 根据用户id查找用户信息
     *
     * @param userId 用户id
     * @return
     */
    UserInfo details(@Param("userId") Integer userId);

    /**
     * 管理员修改用户信息
     *
     * @param userInfo 要修改的用户信息
     */
    void modify(UserInfo userInfo);
}
